Описание
Задает или возвращает значение, указывающее, как конструируется
предложение WHERE для каждой записи в операции пакетного обновления, а
также следует ли в операции пакетного обновления использовать инструкцию
UPDATE или инструкцию DELETE с последующей инструкцией
INSERT (только в рабочей области ODBCDirect).
Значение
Задаваемое или возвращаемое значение имеет тип данных Long
и определяется с помощью следующих констант:
dbCriteriaKey (По умолчанию). Использование в предложении WHERE только ключевого столбца (столбцов). dbCriteriaModValues Использование в предложении WHERE ключевого столбца (столбцов) и всех обновляемых столбцов. dbCriteriaAllCols Использование в предложении WHERE ключевого столбца (столбцов) и всех столбцов. dbCriteriaTimeStamp Использование только столбца штампа времени, если имеется (если столбец штампа времени отсутствует в результирующем наборе записей, возникает ошибка выполнения). dbCriteriaDeleteInsert Использование набора инструкций DELETE и INSERT для каждого изменяемого столбца. dbCriteriaUpdate (По умолчанию). Использование инструкции UPDATE для каждого изменяемого столбца.
Замечания
При выполнении метода Update в пакетном режиме механизм
объектов доступа к данным (DAO) и библиотека пакетных указателей клиента
создают для выполнения требуемых изменений набор инструкций UPDATE языка
SQL. Для каждого обновления создается предложение WHERE, чтобы
изолировать записи, которые отмечены как измененные с помощью свойства
RecordStatus. Поскольку некоторые удаленные серверы используют триггеры
или другие средства обеспечения целостности данных, часто важно ограничить
обновляемые поля только теми, которые затрагиваются изменениями. Для этого
следует задать в свойстве UpdateOptions одну из следующих констант:
dbCriteriaKey,dbCriteriaModValues, dbCriteriaAllCols или
dbCriteriaTimeStamp. Это обеспечивает выполнение абсолютно минимального
количества программ триггеров. В результате, операция обновления выполняется
быстрее с потенциально меньшим количеством ошибок.
Допускается также
комбинирование этих констант с константой dbCriteriaDeleteInsert или
dbCriteriaUpdate. Последние определяют для каждого обновления либо
использование пары инструкций SQL DELETE и INSERT, либо инструкции
UPDATE при отправке пакета обновлений на сервер. В первом случае для
обновления записи требуются две отдельные операции. В некоторых случаях, в
особенности при реализации на удаленной системе триггеров DELETE,
INSERT и UPDATE, выбор правильного параметра UpdateOptions
позволяет существенно повысить быстродействие.
Если пользователь не задал ни
одну из констант, по умолчанию используются константы dbCriteriaUpdate и
dbCriteriaKey.
Для новых добавленных записей всегда генерируются
инструкции INSERT, а при удалении записей всегда генерируются инструкции
DELETE, поэтому данное свойство влияет только на обновления измененных
записей библиотекой указателей.
Пример
Следующая программа использует свойства BatchSize и
UpdateOptions для управления операциями пакетного обновления указанного
объекта Recordset.
Sub BatchSizeX()
Dim wrkMain As Workspace
Dim conMain As Connection
Dim rstTemp As Recordset
Set wrkMain = CreateWorkspace("ODBCWorkspace", "admin", "", dbUseODBC)
' Это значение свойства DefaultCursorDriver
' требуется для пакетного обновления.
wrkMain.DefaultCursorDriver = dbUseClientBatchCursor
Set conMain = wrkMain.OpenConnection("Publishers", dbDriverNoPrompt, False, "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
' Следующее значение аргумента блокировки
' требуется для пакетного обновления.
Set rstTemp = conMain.OpenRecordset( "SELECT * FROM roysched", dbOpenDynaset, 0, dbOptimisticBatch)
With rstTemp
' Увеличивает число инструкций, отправляемых на сервер
' в одной операции пакетного обновления, что приводит
' к уменьшению количества обращений к серверу.
.BatchSize = 25
' Изменяет значение свойства UpdateOptions таким образом,
' чтобы предложение WHERE любой инструкции в пакете,
' отправленном на сервер включало все обновляемые
' столбцы в дополнение к ключевым столбцам. Кроме того,
' любые изменения записей выполняются путем удаления
' исходной записи и добавления измененной версии записи
' вместо простого изменения исходной записи.
.UpdateOptions = dbCriteriaModValues + dbCriteriaDeleteInsert
' Выполняет пакетное обновление с использованием
' заданных выше настроек.
' ...
.Close
End With
conMain.Close
wrkMain.Close
End Sub